查看原文
其他

LLM微调经验&认知

AINLP 2024-01-04


作者:快乐子涵酱

原文地址:https://zhuanlan.zhihu.com/p/634180659


  • 关于认知

  1. 知识来自于pretrain阶段,指令微调通常只不过是为了让LLM显示地输出已具备知识。

  2. 延申下来,可以理解Llama(原生)是一个会听不会讲中文的人,用中文语料做指令微调,实际上更多是教他“说中文”。换句话说,指令微调可以教他”用中文写文章“,但不会教他“写文章”本身。

  3. 模型一但学会中文后,一些指令微调数据集里没见过的中文词汇它竟然也可以理解和输出,这里有些惊奇。

  4. 但这并不意味着指令微调除了教模型”更好地说话“以外没有其他作用,事实上在这个阶段模型也能学到一定的知识。例如用高质量领域数据集进行微调,模型可以学会很多本身不具备的新技能。

  5. 如果说指令微调是为了让模型“能说会说”,那RLHF更多是让模型“说得更符合心意”。

  6. 尽管RLHF阶段的LOSS设计会驱使模型的输出不要偏离SFT太多,但仍可能会造成NLU能力的损失。

  7. 指令微调并不是数据量越多越好,可能10k左右就够了。数据质量可能更重要,太大的数据量有可能“阉割”掉模型原有的base能力

  8. 多TASK或者多语言混合微调可能会有更好的效果,TASK不足的情况下考虑增加目标任务的数据量

  9. 目前的LLM如GPT、Llama、chatGLM等都可以理解为是一个“办公助手”的角色,想真正做到拟人,其实还是要靠角色扮演prompt。但情感链接这块,和真人还是有很大差距。换句话说,你时刻都能感觉到自己是在和AI对话,而不是一个“有情感”的机器人。

关于训练

  1. Lora框架peft需要torch>=1.13.1,torch1.13.1可能需要cuda11.7,安装环境够让人头疼一会了。

  2. Lora配合int8可以大幅度降低显存,但deepspeed不支持int8。如果想同时使用,要么float16,要么换accelerate包

  3. int8推理太慢了!

  4. 指令微调可以理解是【Q+A】文本拼接,其中Q部分没必要计算loss,设置ignore_index即可。参考alpaca

  5. 实测chatGLM的tokenizer中文分词其实做的挺一般的,如果想做第4点,数据处理时需要格外注意,它有可能把拼接的位置切错

  6. 中文指令微调需要注意max_length,别傻傻照抄256/512

  7. 一般情况下lr选择9e-6到1e-5即可

  8. 据说batch size大一点性能会更好,但这个还真没实验过

  9. 拿中文对话数据集在Llama(中文)上训了一次,结果很捞,没想通为啥。可能真人对话数据和指令微调数据(偏书面)差距太大了,模型学懵了

------------------------------------------------

0606更新:

关于认知

10. 假设有一道多选题,那答案的设置最好是ABCD而不是1234,对于模型来说可能这几个数字没有太大区别,尤其是底座模型能力相对比较弱的情况下。

11. 一个很玄学的东西,相对于人类语言,模型可能更容易理解“模型语言”。解释起来就是:有时候人精心写的prompt或few shot,可能还不如模型自己生成的case(尽管这些case可能是错的),参考auto CoT

12. pretrain阶段,可能数据量+质量的优先级大于epoch。且pretrain使用过的语料,微调阶段没必要再用一次,几乎没有提升了。

关于训练

10. 微调时候,prompt和output尽量别重复,否则真的会在这个句式上过拟合的

一些猜想

  1. 领域微调,尤其是做一些特殊任务时,模型参数越大可能越难训。可以理解数据是一个“撬棍”,模型是一个“巨大的火车头”,想让“火车头”朝着你指定的方向行驶,要么靠原有的“铁轨”(即模型本身就有这个能力),要么靠微调数据这个小棍子。当这个车头太重且撬棍很小时,其实很难掰动车头的

  2. 总感觉现在这些模型的多轮对话做的有问题,只是简单的把上一轮对话扔进下一轮的input里,时间久了max_length和显存爆炸,chatGPT就没这个问题。可能把历史对话做一个摘要或embedding映射更合理一点?

  3. 0626补充:chatGLM2出来了,max_length起飞,方法不变。事实证明是我想多了

  4. 接3。GLM2改动还是挺多的,仔细看了一下源码,受益匪浅。之前的回答是我太浅薄了~

  5. 到底Llama是咋看懂中文的呢?怀疑预训练数据清洗时没有洗干净,输入里掺杂了一些中文或翻译任务


0613吐槽一下


今天老板质疑我的模型,说你这个做的不行啊,和chatGPT差远了。


任务是公司的一个业务领域内的问答,从开始到现在做了大概二十多天不到一个月的时间,包括造数据洗数据微调模型人工评测等等。


当前指标是:两类问答数据,GPT分别是93%和72%,我们是75%和74%(微调之前是23%和48%)


我一时间竟然不知道如何反驳,我只能说我能力不行,我只是个P5而已



进技术交流群请添加AINLP小助手微信(id: ainlp2)

请备注具体方向+所用到的相关技术点

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括LLM、预训练模型、自动生成、文本摘要、智能问答、聊天机器人、机器翻译、知识图谱、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP小助手微信(id:ainlp2),备注工作/研究方向+加群目的。



继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存